<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns="http://www.w3.org/1999/xhtml">
<!-- 	xmlns:fo="http://www.w3.org/1999/XSL/Format" -->

<xsl:output
	method="xml"
	indent="yes"
	encoding="UTF-8"
	omit-xml-declaration="no"
	doctype-system="about:legacy-compat"/>


<xsl:variable name="page" select="/sun-wars/page/@name"/>
<xsl:variable name="id-player-session" select="/sun-wars/@id-player"/>
<xsl:variable name="id-planet-current-session" select="/sun-wars/@id-planet-current"/>
<xsl:variable name="player-session" select="/sun-wars/players/player[@id=$id-player-session]"/>
<xsl:variable name="planet-current-session" select="/sun-wars/planets/planet[@id=$id-planet-current-session]"/>
<xsl:variable name="names" select="document('names.xml')/names"/>

<!-- Recopie en sortit un nœud xml à la manière de xsl:copy-of -->
<xsl:template name="xparse-tag">
	<xsl:param name="root"/>

	<xsl:choose>
		<xsl:when test="name($root)">
			<xsl:for-each select="$root">
				<xsl:element name="{name()}">
					<xsl:for-each select="@*">
						<xsl:attribute name="{name()}">
							<xsl:value-of select="."/>
						</xsl:attribute>
					</xsl:for-each>
					<xsl:for-each select="node()">
						<xsl:call-template name="xparse-tag">
							<xsl:with-param name="root" select="."/>
						</xsl:call-template>
					</xsl:for-each>
				</xsl:element>
			</xsl:for-each>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="."/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

<!-- Affiche des inputs hidden selon les valeurs de request-keep (moyen pour afficher la page)-->
<xsl:template name="hidden-request-keep">
	<xsl:for-each select="/sun-wars/page/request-keep/value">
		<input type="hidden" name="{@name}" value="{text()}" />
	</xsl:for-each>
</xsl:template>

<!-- Affiche les valeurs de request-keep (moyen pour afficher la page) sous forme de chaine de caractère pour être ajouté à une url (pas de ? séparateur, il faut le mettre)-->
<xsl:template name="str-request-keep"><xsl:for-each select="/sun-wars/page/request-keep/value">&#38;<xsl:value-of select="@name"/>=<xsl:value-of select="text()"/></xsl:for-each></xsl:template>


<!-- norme de duration de xs:duration (PnYnMnDTnHnMnS) :
http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#duration
The lexical representation for duration is the [ISO 8601] extended format PnYn MnDTnH nMnS, where nY represents the number of years, nM the number of months, nD the number of days, 'T' is the date/time separator, nH the number of hours, nM the number of minutes and nS the number of seconds. The number of seconds can include decimal digits to arbitrary precision.
Ne prend pas en comtpe les mois et années et les secondes sont toujours présente-->
<xsl:template name="duration-format">
	<xsl:param name="duration"/>

	<xsl:variable name="day" select="substring-before($duration, 'D')"/>
	<xsl:variable name="hour" select="substring-before($duration, 'H')"/>
	<xsl:variable name="min" select="substring-before($duration, 'M')"/>
	<xsl:variable name="sec" select="substring($duration, string-length($duration) - 2, 2)"/>

	<xsl:variable name="datetime">
		<xsl:if test="$day"><xsl:value-of select="number(substring-after($day, 'P'))"/>jours </xsl:if>
		<xsl:if test="$hour"><xsl:value-of select="number(substring-after($hour, 'T'))"/>h </xsl:if>
		<xsl:if test="$min"><xsl:value-of select="number(substring($min, string-length($min) - 1, 2))"/>min </xsl:if>
		<xsl:if test="$sec != '00'"><xsl:value-of select="number($sec)"/>s</xsl:if>
	</xsl:variable>

	<time class="duration" datetime="{$datetime}"><xsl:value-of select="$datetime"/></time>
</xsl:template>


<!-- Join chaque $node au moyen de $str-glue -->
<xsl:template name="string-join">
	<xsl:param name="node"/>
	<xsl:param name="str-glue"/>

	<xsl:for-each select="$node">
		<xsl:value-of select="text()"/>
		<xsl:if test="position() != last()">
			<xsl:value-of select="$str-glue"/>
		</xsl:if>
	</xsl:for-each>
</xsl:template>


<!-- affiche les coordonnées-->
<xsl:template match="coordinates">
	<xsl:call-template name="string-join">
		<xsl:with-param name="node" select="./*"/>
		<xsl:with-param name="str-glue" select="':'"/>
	</xsl:call-template>
</xsl:template>


<!-- Affiche la planète (nom + coordinnées) représenter par $id  -->
<xsl:template name="apply-planet">
	<xsl:param name="id"/>

	<xsl:apply-templates select="/sun-wars/planets/planet[@id=$id]"/>
</xsl:template>


<xsl:template match="planet">
	<xsl:apply-templates select="coordinates"/>
	<xsl:if test="boolean(name/text())">
		- <xsl:value-of select="name"/>
	</xsl:if>
</xsl:template>


<xsl:template name="header">
	<header>
		<hgroup>
			<h1 id="logo">Sunwars</h1>
			<h2>Jeu multi-joueurs par navigateur</h2>
		</hgroup>
		<nav>
			<ul>
				<li><a href="../" title="déconnection">Se déconnecter</a></li>
			</ul>
		</nav>
	</header>
</xsl:template>


<xsl:template name="footer">
	<footer>
		<address>
			<a href="?page=bug" title="rapport de bug">Rapport de bug</a>
			<!--contacter <a>l'administrateur</a>-->
		</address>
	</footer>
</xsl:template>


<!-- formulaire pour choisir la planète -->
<xsl:template name="select-planet">
	<form method="get" action="{$page}">
		<xsl:call-template name="hidden-request-keep"/>
		<label for="select_planet">Planète :</label>
		<select id="select_planet" name="select_planet">
			<xsl:variable name="planet-current" select="$id-planet-current-session"/>

			<xsl:for-each select="/sun-wars/planets/planet">
				<option value="{@id}">
					<xsl:if test="$id-planet-current-session = @id">
						<xsl:attribute name="selected">selected</xsl:attribute>
					</xsl:if>
					<xsl:apply-templates select="."/>
				</option>
			</xsl:for-each>
		</select>
		<input type="submit" value="Choisir" />
	</form>
</xsl:template>


<!-- Menu de navigateion -->
<xsl:template name="navigation">
	<nav role="navigation" id="menu-principal">
		<ul>
			<li><a href="?page=structure" title="gestion de la planète">Gestion de la planète</a></li>
			<li><a href="?page=move" title="déplacement de vaisseaux">Mouvement</a></li>
			<li><a href="?page=galaxy" title="planètes du jeu">Voir les planètes</a></li>
			<li><a href="?page=message" title="voir ses message">Message</a></li>
			<li><a href="?page=options" title="configuration des options">Options</a></li>
		</ul>

		<xsl:call-template name="select-planet"/>
	</nav>
</xsl:template>


<!-- fait un $names[@id=$id] -->
<xsl:template name="value-of-id">
	<xsl:param name="names"/>
	<xsl:param name="id"/>

	<xsl:value-of select="$names[@id=$id]"/>
</xsl:template>


<!-- utilise name-value-table pour un tableau de ressuorce-->
<xsl:template name="table-resource">
	<xsl:param name="names"/>
	<xsl:param name="nodes"/>
	<xsl:param name="no-tfoot"/>

	<xsl:call-template name="name-value-table">
		<xsl:with-param name="names" select="$name"/>
		<xsl:with-param name="nodes" select="$nodes"/>
		<xsl:with-param name="caption" select="'Ressource'"/>
		<xsl:with-param name="name-group" select="'Nom'"/>
		<xsl:with-param name="name-value" select="'Quantité'"/>
		<xsl:with-param name="no-tfoot" select="$no-tfoot"/>
	</xsl:call-template>
</xsl:template>


<!-- englobe name-value-tr avec un table-->
<xsl:template name="name-value-table">
	<xsl:param name="names"/>
	<xsl:param name="nodes"/>
	<xsl:param name="caption"/>
	<xsl:param name="name-group"/>
	<xsl:param name="name-value"/>
	<xsl:param name="no-tfoot"/>

	<xsl:variable name="thead">
		<th><xsl:value-of select="$name-group"/></th>
		<th><xsl:value-of select="$name-value"/></th>
	</xsl:variable>

	<table>
		<xsl:if test="$caption">
			<caption><xsl:value-of select="$caption"/></caption>
		</xsl:if>

		<thead><xsl:value-of select="$thead"/></thead>
		<xsl:if test="no-tfoot">
			<tfoot><xsl:value-of select="$thead"/></tfoot>
		</xsl:if>
		<tbody>
			<xsl:call-template name="name-value-tr">
				<xsl:with-param name="names" select="$name/*"/>
				<xsl:with-param name="nodes" select="$nodes"/>
			</xsl:call-template>
		</tbody>
	</table>
</xsl:template>


<!-- englobe name-value-td avec un tr-->
<xsl:template name="name-value-tr">
	<xsl:param name="names"/>
	<xsl:param name="nodes"/>

	<xsl:for-each select="$nodes">
		<tr>
			<xsl:call-template name="name-value-td">
				<xsl:with-param name="names" select="$name"/>
				<xsl:with-param name="node" select="."/>
			</xsl:call-template>
		</tr>
	</xsl:for-each>
</xsl:template>


<!-- affiche 2 td,  le premier est le nom du nœud désigné par l'attribut $node/@group et le secodn et le texte de $node-->
<xsl:template name="name-value-td">
	<xsl:param name="names"/>
	<xsl:param name="node"/>

	<xsl:variable name="id" select="$node/group"/>

	<td><xsl:value-of select="$names[@id=$id]"/></td>
	<td><xsl:value-of select="$node"/></td>
</xsl:template>


<!-- Affiche un tableau des ressources du joueur et gagné par heure -->
<xsl:template match="resources[@id-planet]">
	<xsl:if test="count(resource) != 0">
		<xsl:variable name="names-resource" select="$names/resources/resource"/>

		<table>
			<caption>Ressources</caption>
			<thead>
				<tr>
					<td></td>
					<xsl:for-each select="resource">
						<th>
							<xsl:variable name="group" select="@group"/>
							<xsl:value-of select="$names-resource[@id=$group]"/>
						</th>
					</xsl:for-each>
				</tr>
			</thead>
			<tbody>
				<tr>
					<th>Quantité</th>
					<xsl:for-each select="resource">
						<td><xsl:value-of select="quantity"/></td>
					</xsl:for-each>
				</tr>
				<tr>
					<th>Par heure</th>
					<xsl:for-each select="resource">
						<td><xsl:value-of select="quantity/@per-hour"/></td>
					</xsl:for-each>
				</tr>
			</tbody>
		</table>
	</xsl:if>
</xsl:template>


<xsl:template match="debug">
	<section class="debug" role="debug">
		<xsl:for-each select="node()">
			<article>
				<xsl:call-template name="xparse-tag">
					<xsl:with-param name="root" select="."/>
				</xsl:call-template>
			</article>
		</xsl:for-each>
	</section>
</xsl:template>

<xsl:template match="css">
	<link rel="stylesheet" type="text/css" href="css/{text()}" media="screen" charset="utf-8" />
</xsl:template>

<xsl:template match="js">
	<script type="application/javascript" src="js/{text()}"/>
</xsl:template>

<xsl:template match="/sun-wars">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{@lang}">
		<head>
			<meta charset="UTF-8" />
			<title>
				<xsl:if test="page/title">
					<xsl:value-of select="page/title"/>
				</xsl:if>
				 - Sun-Wars univers <xsl:value-of select="@universe"/>
			</title>

			<!--<meta name="description" content="">
			<meta name="keywords" content="">
			<meta name="author" content="">-->

			<xsl:apply-templates select="page/styles/css"/>

			<link rel="shortcut icon" href="favicon.ico" />
		</head>
		<body role="document">
 			<xsl:call-template name="header"/>
			<xsl:call-template name="navigation"/>

			<xsl:apply-templates select="debug"/>

			<xsl:apply-templates select="resources/resources[@id-planet=$id-planet-current-session]"/>

			<section class="content" role="main">
				<xsl:call-template name="content"/>
			</section>

			<xsl:call-template name="footer"/>

			<xsl:apply-templates select="page/styles/js"/>
		</body>
	</html>
</xsl:template>


</xsl:stylesheet>